/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is Forte for Java, Community Edition. The Initial * Developer of the Original Code is Sun Microsystems, Inc. Portions * Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved. */ package org.netbeans.core.execution; import java.awt.Image; import java.awt.Toolkit; import java.util.Hashtable; import org.openide.execution.Executor; import org.openide.util.HelpCtx; import org.openide.util.actions.ActionPerformer; import org.openide.util.actions.CallbackSystemAction; import org.openide.util.actions.SystemAction; import org.openide.nodes.AbstractNode; import org.openide.nodes.Node; import org.openide.nodes.Children; import org.openide.nodes.NodeEvent; import org.openide.nodes.NodeReorderEvent; import org.openide.nodes.NodeMemberEvent; import org.openide.nodes.NodeListener; /** Node which represents list of running processes. * Final only for better performance. * * @author Ales Novak */ public final class ProcessNode extends AbstractNode implements Runnable { /** generated Serialized Version UID */ static final long serialVersionUID = 5090696227895147340L; static final java.util.ResourceBundle getBundle() { return org.openide.util.NbBundle.getBundle(ProcessNode.class); } /** reference to node signalizing that no processes run */ static AbstractNode noProcesses; /** Reference to an instance of this class */ static ProcessNode processNode; /** * @param parent is a parent node */ public ProcessNode () { super(new Children.Array()); processNode = this; setIconBase("/org/netbeans/core/resources/processes"); // NOI18N addNodeListener(new NodeListener() { public void childrenAdded(NodeMemberEvent ev) { } public void childrenRemoved(NodeMemberEvent ev) { if ((getChildren().getNodesCount() == 0) && (ev.getDelta().length > 0) && (ev.getDelta()[0] != noProcesses)) { org.openide.util.RequestProcessor.postRequest(ProcessNode.this); } } public void childrenReordered(NodeReorderEvent ev) { } public void nodeDestroyed(NodeEvent ev) { } public void propertyChange(java.beans.PropertyChangeEvent ev) { } }); ExecutionEngine.getExecutionEngine().addExecutionListener(createListener()); setName(getBundle().getString("Processes")); setShortDescription(getBundle().getString("Processes_HINT")); addNoProcessNode(); } public HelpCtx getHelpCtx () { return new HelpCtx (ProcessNode.class); } public Node.Handle getHandle () { return new ProcessHandle(); } static final class ProcessHandle implements Node.Handle { static final long serialVersionUID =-6979883764640743928L; public Node getNode () { return getExecutionNode(); } } /** creates new ExecutionListener that listens on ExecutionEngine * @return new @see ExecutionListener */ private ExecutionListener createListener() { return new ExecutionListener() { /** called after begin of new execution */ public void startedExecution(ExecutionEvent ev) { DefaultSysProcess proc = ev.getProcess(); ProcessNodeItem item = new ProcessNodeItem(proc); removeNoProcessNode(); getChildren ().add(new Node[] { item }); } /** called after end of execution */ public void finishedExecution(ExecutionEvent ev) { } }; } /** adds node signalizing that no processes run */ void addNoProcessNode() { getChildren ().add(new Node[] { getNoProcessesNode() } ); } /** removes node signalizing that no processes run */ void removeNoProcessNode() { getChildren ().remove(new Node[] { getNoProcessesNode() }); } /** @return filter node for the execution node with the given parent */ public static Node getExecutionNode() { if (processNode == null) { processNode = new ProcessNode(); } return processNode; } public static Node getNoProcessesNode() { if (noProcesses == null) { noProcesses = new AbstractNode(Children.LEAF); noProcesses.setName(getBundle().getString("CTL_No_processes")); noProcesses.setShortDescription(getBundle().getString("HINT_No_processes")); noProcesses.setIconBase("/org/netbeans/core/resources/noProcesses"); // NOI18N } return noProcesses; } public void run() { addNoProcessNode(); } } /* * Log * 19 Gandalf 1.18 2/10/00 David Simonek Icon for "no processes" * added * 18 Gandalf 1.17 1/12/00 Ales Novak i18n * 17 Gandalf 1.16 11/17/99 Ales Novak #4438 * 16 Gandalf 1.15 11/11/99 Jesse Glick Display miscellany. * 15 Gandalf 1.14 10/22/99 Ian Formanek NO SEMANTIC CHANGE - Sun * Microsystems Copyright in File Comment * 14 Gandalf 1.13 10/1/99 Ales Novak major change of * execution * 13 Gandalf 1.12 8/9/99 Ian Formanek Generated Serial Version * UID * 12 Gandalf 1.11 7/30/99 David Simonek again serialization of * nodes repaired * 11 Gandalf 1.10 7/8/99 Jesse Glick Context help. * 10 Gandalf 1.9 6/28/99 Ian Formanek Removed obsoleted import * 9 Gandalf 1.8 6/8/99 Ian Formanek ---- Package Change To * org.openide ---- * 8 Gandalf 1.7 5/9/99 Ian Formanek setDisplayName -> * setName as recommended for AbstractNode * 7 Gandalf 1.6 5/6/99 Ales Novak displaying of * NoProcesses node * 6 Gandalf 1.5 3/24/99 Ales Novak * 5 Gandalf 1.4 3/5/99 Ales Novak * 4 Gandalf 1.3 3/3/99 David Simonek * 3 Gandalf 1.2 1/21/99 Ales Novak * 2 Gandalf 1.1 1/7/99 Ian Formanek fixed resource names * 1 Gandalf 1.0 1/5/99 Ian Formanek * $ */